//
//  LMStatusViewMode.swift
//  WeiBo
//
//  Created by Li MAc on 2018/11/20.
//  Copyright © 2018 Li MAc. All rights reserved.
//

import Foundation

/// 设置最多错误刷新数
private let maxStatus = 3

class LMStatusViewMode {
    //微博模型数组懒加载
    
    lazy var  stat = [WBStatusViewModel]()
    
    /// 错误数
    lazy var statusError = 0
    
    /// 加载微博数据列表f
    ///
    /// - Parameters:
    ///   - stretchingUp: 判断是否上拉刷新
    ///   - completion: isSuccess回调是否成功   hasStatusUp是否有更多的上拉刷新  hasStatusUp为falst 的时候不会刷新列表
    func lodStatus(stretchingUp:Bool, completion:@escaping (_ isSuccess:Bool ,_ hasStatusUp:Bool)->()){
        
        //判断是否是上拉刷新,同时检查刷新是否错误,错误不执行下面的一系列方法
        if stretchingUp && statusError > maxStatus{
            completion(true, false)
            return
        }
        
        //取出数组中的第一条微博
        let since_id = stretchingUp ? 0: (stat.first?.status.id ?? 0)
        let max_id = !stretchingUp ? 0 :(stat.first?.status.id ?? 0)
        
        //发起网络请求，加载微博数据[字典数组]
        LMNetworkTools.shared.statusList(since_id: since_id, max_id:max_id ) { (list, isSuccess) in
            //字典转模型
            
            //网络请求失败，执行完成回调
            if !isSuccess {
                completion(false,false)
                return
            }
            
            var starray = [WBStatusViewModel]()
            //list 是可选的 取空则不会执行下面方法
            for dict in list ?? [] {
                //1.创建微博模型 实例化 init
//                let lmstatt = LMStatus()
print(dict["pic_urls"])
                //2.字典转模型
//                lmstatt.yy_modelSet(with: dict)
                let lmstatt = LMStatus.yy_model(withJSON: dict) as! LMStatus

                //3.将微博模型转换成视图模型
                let viewModel = WBStatusViewModel(model: lmstatt)

                //4.添加到数组
                starray.append(viewModel)
            
                
            }
            
            
//            guard let array = NSArray.yy_modelArray(with: LMStatus.self, json: list ?? [])as?[LMStatus] else{
//                //当没有数据时会执行此方法
//                completion(isSuccess, false)
//                return
//            }
            
            if stretchingUp{
                self.stat += starray
                
            }else{
                //下拉刷新加到数组的前面
                self.stat += starray + self.stat
                //            print("@@@@@@")
            }
            print("----刷新的\(self.stat.count)条数据")
            //当3次上拉刷新的数量为0 时 就不在调用网络方法
            if stretchingUp && starray.count == 0{
                self.statusError += 1
                //false 代表不能上拉刷新
                completion(isSuccess,false)
            }else{
             completion(isSuccess, true)
            }
        }
    
    }
}
